From 870eefc3bbc8ab6867c5f031707bcb096e103e08 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=98yvind=20Kol=C3=A5s?= Date: Sun, 27 Jun 2010 14:50:41 +0100 Subject: [PATCH] Port all of babl to use use babl_set_destructor Making all babl objects be free-able with babl_free means that overall management code can be directly shared between the different babl-classes. --- babl/Makefile.am | 2 +- babl/babl-class.h | 25 +++++-------------- babl/babl-classes.h | 2 +- babl/babl-component.c | 9 ------- babl/babl-component.h | 2 +- babl/babl-conversion.c | 8 ------ babl/babl-conversion.h | 2 +- babl/babl-db.c | 34 ++++++++++++++++--------- babl/babl-db.h | 3 --- babl/babl-extension.c | 56 ++++++++++++------------------------------ babl/babl-extension.h | 4 +-- babl/babl-fish-path.c | 14 +++++++++-- babl/babl-fish.c | 29 ---------------------- babl/babl-format.c | 13 ++-------- babl/babl-format.h | 2 +- babl/babl-hash-table.c | 23 ++++++++--------- babl/babl-hash-table.h | 4 --- babl/babl-image.c | 12 --------- babl/babl-internal.h | 36 ++++++--------------------- babl/babl-list.c | 19 +++++++------- babl/babl-list.h | 3 --- babl/babl-model.c | 11 ++++----- babl/babl-model.h | 2 +- babl/babl-sampling.c | 4 +-- babl/babl-sampling.h | 4 ++- babl/babl-type.c | 12 ++++----- babl/babl-type.h | 2 +- babl/babl.c | 48 +++++++++++++++++++++++------------- 28 files changed, 141 insertions(+), 244 deletions(-) diff --git a/babl/Makefile.am b/babl/Makefile.am index d62125c..12cd969 100644 --- a/babl/Makefile.am +++ b/babl/Makefile.am @@ -11,7 +11,6 @@ c_sources = \ babl-component.c \ babl-conversion.c \ babl-core.c \ - babl-cpuaccel.c \ babl-db.c \ babl-extension.c \ babl-fish-path.c \ @@ -32,6 +31,7 @@ c_sources = \ babl-sanity.c \ babl-type.c \ babl-util.c \ + babl-cpuaccel.c \ babl-version.c h_sources = \ diff --git a/babl/babl-class.h b/babl/babl-class.h index 534c476..4e9bbaf 100644 --- a/babl/babl-class.h +++ b/babl/babl-class.h @@ -33,25 +33,12 @@ typedef int (*BablEachFunction) (Babl *entry, * to be iterated over, common functionality is defined through these * macros. */ -#define BABL_CLASS_DECLARE(klass) \ - \ -Babl * babl_##klass##_from_id (int id); \ -void babl_##klass##_class_init (void); \ -void babl_##klass##_class_destroy (void); \ -void babl_##klass##_class_for_each (BablEachFunction each_fun, \ - void *user_data) - -/* If a class is declared as a "named class" it means it is a class - * that has a specific name connected to it, that also allows defining - * a new instance. These classes share common functionality with the - * non_name classes but have two extra methods, the means to lookup by - * name, as well as to create new named objects that later can be - * looked up. These methods are babl_klass() babl_klass_new() but they - * are declared outside of this macro. - */ -#define BABL_NAMED_CLASS_DECLARE(klass) \ -BABL_CLASS_DECLARE (klass) - +#define BABL_CLASS_DECLARE(klass) \ + \ +BablDb * babl_##klass##_db (void); \ +Babl * babl_##klass##_from_id (int id); \ +void babl_##klass##_class_for_each (BablEachFunction each_fun, \ + void *user_data) /* common header for any item inserted into database, the actual * implementation of babl-instance is in babl-internal diff --git a/babl/babl-classes.h b/babl/babl-classes.h index eeaa262..0427c30 100644 --- a/babl/babl-classes.h +++ b/babl/babl-classes.h @@ -20,6 +20,7 @@ #define _BABL_CLASSES_H #include "babl-class.h" +#include "babl-db.h" /* magic number used at the start of all babl objects, used to do * differentiation in polymorphic functions. (as well as manual type @@ -54,7 +55,6 @@ enum { BABL_SKY }; - #include "babl-type.h" #include "babl-sampling.h" #include "babl-component.h" diff --git a/babl/babl-component.c b/babl/babl-component.c index 301e64d..54a06b3 100644 --- a/babl/babl-component.c +++ b/babl/babl-component.c @@ -23,15 +23,6 @@ #include - -static int -each_babl_component_destroy (Babl *babl, - void *data) -{ - babl_free (babl); - return 0; /* continue iterating */ -} - static Babl * component_new (const char *name, int id, diff --git a/babl/babl-component.h b/babl/babl-component.h index df9d719..2c45cdc 100644 --- a/babl/babl-component.h +++ b/babl/babl-component.h @@ -22,7 +22,7 @@ /****************************************************************/ /* BablComponent */ -BABL_NAMED_CLASS_DECLARE (component); +BABL_CLASS_DECLARE (component); typedef struct diff --git a/babl/babl-conversion.c b/babl/babl-conversion.c index 422e2dd..ea6be81 100644 --- a/babl/babl-conversion.c +++ b/babl/babl-conversion.c @@ -24,14 +24,6 @@ #include "babl-internal.h" #include "babl-db.h" -static int -each_babl_conversion_destroy (Babl *babl, - void *data) -{ - babl_free (babl); - return 0; /* continue iterating */ -} - static Babl * conversion_new (const char *name, int id, diff --git a/babl/babl-conversion.h b/babl/babl-conversion.h index d231b64..fbbb279 100644 --- a/babl/babl-conversion.h +++ b/babl/babl-conversion.h @@ -19,7 +19,7 @@ #ifndef _BABL_CONVERSION_H #define _BABL_CONVERSION_H -BABL_NAMED_CLASS_DECLARE (conversion); +BABL_CLASS_DECLARE (conversion); Babl * babl_conversion (const char *name); diff --git a/babl/babl-db.c b/babl/babl-db.c index 7825cc0..fed9a05 100644 --- a/babl/babl-db.c +++ b/babl/babl-db.c @@ -55,10 +55,33 @@ db_hash_by_id (BablHashTable *htab, Babl *item) return babl_hash_by_int (htab, item->instance.id); } +static int +each_free (Babl *data, + void *foo) +{ + babl_free (data); + return 0; +} + +static int +babl_db_destroy (void *data) +{ + BablDb *db = data; + babl_assert (db); + + babl_db_each (db, each_free, NULL); + babl_mutex_destroy (db->mutex); + babl_free (db->name_hash); + babl_free (db->id_hash); + babl_free (db->babl_list); + return 0; +} + BablDb * babl_db_init (void) { BablDb *db = babl_calloc (sizeof (BablDb), 1); + babl_set_destructor (db, babl_db_destroy); db->name_hash = babl_hash_table_init (db_hash_by_name, db_find_by_name); db->id_hash = babl_hash_table_init (db_hash_by_id, db_find_by_id); @@ -68,17 +91,6 @@ babl_db_init (void) return db; } -void -babl_db_destroy (BablDb *db) -{ - babl_assert (db); - - babl_mutex_destroy (db->mutex); - babl_hash_table_destroy (db->name_hash); - babl_hash_table_destroy (db->id_hash); - babl_list_destroy (db->babl_list); - babl_free (db); -} Babl * babl_db_find (BablDb *db, diff --git a/babl/babl-db.h b/babl/babl-db.h index 6b4e6ff..a07a17b 100644 --- a/babl/babl-db.h +++ b/babl/babl-db.h @@ -42,9 +42,6 @@ typedef struct _BablDb BablDb * babl_db_init (void); -void -babl_db_destroy (BablDb *db); - void babl_db_each (BablDb *db, BablEachFunction each_fun, diff --git a/babl/babl-extension.c b/babl/babl-extension.c index 1628d03..1973588 100644 --- a/babl/babl-extension.c +++ b/babl/babl-extension.c @@ -20,10 +20,6 @@ #include "config.h" -#define BABL_PATH LIBDIR BABL_DIR_SEPARATOR BABL_LIBRARY - -#define BABL_INIT_HOOK init_hook (); -#define BABL_DESTROY_HOOK destroy_hook (); #ifdef BABL_DYNAMIC_EXTENSIONS /* must be defined before inclusion of babl-internal.h */ @@ -37,8 +33,6 @@ #include #include -static int each_babl_extension_destroy (Babl *babl, void *data); - static Babl *babl_extension_current_extender = NULL; Babl * @@ -55,6 +49,9 @@ babl_set_extender (Babl *new_extender) babl_extension_current_extender = new_extender; } +static int +babl_extension_destroy (void *data); + static Babl * extension_new (const char *path, void *dl_handle, @@ -63,6 +60,7 @@ extension_new (const char *path, Babl *babl; babl = babl_malloc (sizeof (BablExtension) + strlen (path) + 1); + babl_set_destructor (babl, babl_extension_destroy); babl->instance.name = (char *) babl + sizeof (BablExtension); strcpy (babl->instance.name, path); babl->instance.id = 0; @@ -93,7 +91,11 @@ babl_extension_base (void) void (*destroy)(void) = NULL; if (!db) - db = babl_db_init (); + { + babl_extension_quiet_log (); + babl_set_extender (NULL); + db = babl_db_init (); + } babl = extension_new ("BablBase", dl_handle, destroy); @@ -111,15 +113,7 @@ babl_extension_base (void) return babl; } -static void -init_hook (void) -{ - babl_extension_quiet_log (); - babl_set_extender (NULL); -} - -static void -destroy_hook (void) +void babl_extension_deinit (void) { babl_free (babl_quiet); babl_quiet = NULL; @@ -187,7 +181,7 @@ load_failed (Babl *babl) { if (babl) { - each_babl_extension_destroy (babl, NULL); + babl_free (babl); } babl_set_extender (NULL); return NULL; @@ -278,17 +272,6 @@ babl_extension_load_dir (const char *base_path) } } -static const char * -babl_dir_list (void) -{ - const char *ret; - - ret = getenv ("BABL_PATH"); - if (!ret) - ret = BABL_PATH; - return ret; -} - static char * expand_path (char *path) { @@ -325,7 +308,7 @@ expand_path (char *path) /* parse the provided colon seperated list of paths to search */ -static void +void babl_extension_load_dir_list (const char *dir_list) { int eos = 0; @@ -364,25 +347,18 @@ babl_extension_load_dir_list (const char *dir_list) babl_free (path); } -static void -dynamic_init_hook (void) -{ - babl_extension_load_dir_list (babl_dir_list ()); -} - #endif + static int -each_babl_extension_destroy (Babl *babl, - void *data) +babl_extension_destroy (void *data) { + Babl *babl = data; if (babl->extension.destroy) babl->extension.destroy (); if (babl->extension.dl_handle) dlclose (babl->extension.dl_handle); - - babl_free (babl); - return 0; /* continue iterating */ + return 0; } BABL_CLASS_IMPLEMENT (extension) diff --git a/babl/babl-extension.h b/babl/babl-extension.h index cd7f831..4c2610a 100644 --- a/babl/babl-extension.h +++ b/babl/babl-extension.h @@ -22,13 +22,13 @@ /****************************************************************/ /* BablExtension */ -BABL_NAMED_CLASS_DECLARE (extension); +BABL_CLASS_DECLARE (extension); /* * BablExtension objects are only used internally in babl. */ Babl * babl_extension (const char *name); - +void babl_extension_load_dir_list (const char *dir_list); typedef struct { diff --git a/babl/babl-fish-path.c b/babl/babl-fish-path.c index 2622cb3..da5e0b0 100644 --- a/babl/babl-fish-path.c +++ b/babl/babl-fish-path.c @@ -236,6 +236,16 @@ create_name (char *buf, return buf; } +static int +babl_fish_path_destroy (void *data) +{ + Babl *babl=data; + if (babl->fish_path.conversion_list) + babl_free (babl->fish_path.conversion_list); + babl->fish_path.conversion_list = NULL; + return 0; +} + Babl * babl_fish_path (const Babl *source, const Babl *destination) @@ -255,6 +265,7 @@ babl_fish_path (const Babl *source, babl = babl_calloc (1, sizeof (BablFishPath) + strlen (name) + 1); + babl_set_destructor (babl, babl_fish_path_destroy); babl->class_type = BABL_FISH_PATH; babl->instance.id = babl_fish_get_id (source, destination); @@ -284,12 +295,11 @@ babl_fish_path (const Babl *source, get_conversion_path (&pc, (Babl *) source, 0, max_path_length ()); babl_mutex_unlock (babl_format_mutex); - babl_list_destroy (pc.current_path); + babl_free (pc.current_path); } if (babl_list_size (babl->fish_path.conversion_list) == 0) { - babl_list_destroy (babl->fish_path.conversion_list); babl_free (babl); return NULL; } diff --git a/babl/babl-fish.c b/babl/babl-fish.c index a09efaf..dad518b 100644 --- a/babl/babl-fish.c +++ b/babl/babl-fish.c @@ -22,7 +22,6 @@ #include #include - typedef struct _BablFindFish BablFindFish; typedef struct _BablFindFish @@ -48,14 +47,6 @@ static int find_memcpy_fish (Babl *item, void *data); -static int -each_babl_fish_destroy (Babl *babl, - void *data); - - -/* ====================================== */ - - static int find_fish_path (Babl *item, void *data) @@ -145,14 +136,6 @@ babl_fish_get_id (const Babl *source, return id; } -BablDb * -babl_fish_db (void) -{ - if (!db) - db = babl_db_init (); - return db; -} - Babl * babl_fish (const void *source, const void *destination) @@ -278,16 +261,4 @@ babl_fish (const void *source, } } - - -static int -each_babl_fish_destroy (Babl *babl, - void *data) -{ - if (babl->class_type == BABL_FISH_PATH) - babl_list_destroy (babl->fish_path.conversion_list); - babl_free (babl); - return 0; /* continue iterating */ -} - BABL_CLASS_MINIMAL_IMPLEMENT (fish); diff --git a/babl/babl-format.c b/babl/babl-format.c index 227dab0..4c75d3c 100644 --- a/babl/babl-format.c +++ b/babl/babl-format.c @@ -34,20 +34,11 @@ static int babl_format_destruct (void *babl) babl_free (format->image_template); format->image_template = NULL; } + if (format->from_list) + babl_free (format->from_list); return 0; } -static int -each_babl_format_destroy (Babl *babl, - void *data) -{ - if (babl->format.from_list) - babl_list_destroy (babl->format.from_list); - babl_free (babl); - - return 0; /* continue iterating */ -} - static Babl * format_new (const char *name, int id, diff --git a/babl/babl-format.h b/babl/babl-format.h index f130bcd..fb8dfac 100644 --- a/babl/babl-format.h +++ b/babl/babl-format.h @@ -19,7 +19,7 @@ #ifndef _BABL_FORMAT_H #define _BABL_FORMAT_H -BABL_NAMED_CLASS_DECLARE (format); +BABL_CLASS_DECLARE (format); typedef struct { diff --git a/babl/babl-hash-table.c b/babl/babl-hash-table.c index 8afc3aa..99b7427 100644 --- a/babl/babl-hash-table.c +++ b/babl/babl-hash-table.c @@ -143,6 +143,17 @@ babl_hash_table_size (BablHashTable *htab) return htab->mask + 1; } + +static int +babl_hash_table_destroy (void *data) +{ + BablHashTable *htab = data; + babl_free (htab->data_table); + babl_free (htab->chain_table); + return 0; +} + + BablHashTable * babl_hash_table_init (BablHashValFunction hfunc, BablHashFindFunction ffunc) @@ -153,7 +164,7 @@ babl_hash_table_init (BablHashValFunction hfunc, babl_assert(ffunc); htab = babl_calloc (sizeof (BablHashTable), 1); - babl_assert (htab); + babl_set_destructor (htab, babl_hash_table_destroy); htab->data_table = NULL; htab->chain_table = NULL; @@ -171,16 +182,6 @@ babl_hash_table_init (BablHashValFunction hfunc, return htab; } -void -babl_hash_table_destroy (BablHashTable *htab) -{ - babl_assert (htab); - - babl_free (htab->data_table); - babl_free (htab->chain_table); - babl_free (htab); -} - int babl_hash_table_insert (BablHashTable *htab, Babl *item) diff --git a/babl/babl-hash-table.h b/babl/babl-hash-table.h index ec546f3..f56d02f 100644 --- a/babl/babl-hash-table.h +++ b/babl/babl-hash-table.h @@ -65,8 +65,4 @@ babl_hash_table_find (BablHashTable *htab, BablHashFindFunction find_func, void *data); -void -babl_hash_table_destroy (BablHashTable *htab); - - #endif diff --git a/babl/babl-image.c b/babl/babl-image.c index ed28c89..631fe6d 100644 --- a/babl/babl-image.c +++ b/babl/babl-image.c @@ -237,15 +237,3 @@ babl_image_new (void *first, babl = image_new (format, model, components, component, sampling, type, data, pitch, stride); return babl; } - -void -babl_image_class_destroy (void) -{ - /* nothing to do */ -} - -void -babl_image_class_init (void) -{ - /* nothing to do */ -} diff --git a/babl/babl-internal.h b/babl/babl-internal.h index 70538e9..1f5fe23 100644 --- a/babl/babl-internal.h +++ b/babl/babl-internal.h @@ -40,9 +40,9 @@ #include "babl.h" #define _BABL_INTERNAL_H -#include "babl-class.h" #include "babl-classes.h" #include "babl-introspect.h" +#include "babl-class.h" #include "babl-list.h" #include "babl-hash-table.h" #include "babl-db.h" @@ -80,13 +80,13 @@ Babl * babl_extender (void); void babl_set_extender (Babl *new_extender); Babl * babl_extension_quiet_log (void); +void babl_extension_deinit (void); long babl_fish_reference_process (Babl *babl, BablImage *source, BablImage *destination, long n); -BablDb * babl_fish_db (void); Babl * babl_fish_reference (const Babl *source, const Babl *destination); Babl * babl_fish_simple (BablConversion *conversion); @@ -243,19 +243,6 @@ void babl_internal_init (void); void babl_internal_destroy (void); -#ifndef BABL_INIT_HOOK -#define BABL_INIT_HOOK -#endif -#ifndef BABL_PRE_INIT_HOOK -#define BABL_PRE_INIT_HOOK -#endif -#ifndef BABL_DESTROY_HOOK -#define BABL_DESTROY_HOOK -#endif -#ifndef BABL_DESTROY_PRE_HOOK -#define BABL_DESTROY_PRE_HOOK -#endif - /* this template is expanded in the files including babl-internal.h, * generating code, the declarations for these functions are found in * the BABL_CLASS expansions done in babl.h as well, thus babl.h needs @@ -263,22 +250,13 @@ void babl_internal_destroy (void); */ #define BABL_CLASS_MINIMAL_IMPLEMENT(klass) \ -void \ -babl_##klass##_class_init (void) \ + \ +BablDb * \ +babl_##klass##_db (void) \ { \ - BABL_PRE_INIT_HOOK; \ if (!db) \ db=babl_db_init (); \ - BABL_INIT_HOOK; \ -} \ - \ -void \ -babl_##klass##_class_destroy (void) \ -{ \ - BABL_DESTROY_PRE_HOOK; \ - babl_db_each (db,each_babl_##klass##_destroy, NULL); \ - babl_db_destroy (db); \ - BABL_DESTROY_HOOK; \ + return db; \ } \ \ void \ @@ -319,7 +297,7 @@ babl_##klass##_from_id (int id) \ babl_fatal ("%s(%i): not found", G_STRFUNC, id); \ } \ return babl; \ -} +} \ #define BABL(obj) ((Babl*)(obj)) diff --git a/babl/babl-list.c b/babl/babl-list.c index 2cf1251..49647bb 100644 --- a/babl/babl-list.c +++ b/babl/babl-list.c @@ -31,12 +31,20 @@ babl_list_init (void) return babl_list_init_with_size (BABL_LIST_INITIAL_SIZE); } +static int +babl_list_destroy (void *data) +{ + BablList *list = data; + babl_free (list->items); + return 0; +} + BablList * babl_list_init_with_size (int initial_size) { BablList *list = babl_calloc (sizeof (BablList), 1); - babl_assert (list); + babl_set_destructor (list, babl_list_destroy); if (initial_size == 0) initial_size = 1; @@ -51,15 +59,6 @@ babl_list_init_with_size (int initial_size) return list; } -void -babl_list_destroy (BablList *list) -{ - babl_assert (list); - - babl_free (list->items); - babl_free (list); -} - void babl_list_insert_last (BablList *list, Babl *item) diff --git a/babl/babl-list.h b/babl/babl-list.h index c9c64e8..60cdf6e 100644 --- a/babl/babl-list.h +++ b/babl/babl-list.h @@ -36,9 +36,6 @@ babl_list_init (void); BablList * babl_list_init_with_size (int initial_size); -void -babl_list_destroy (BablList *list); - int babl_list_size (BablList *list); diff --git a/babl/babl-model.c b/babl/babl-model.c index 2b26e91..eb7eee4 100644 --- a/babl/babl-model.c +++ b/babl/babl-model.c @@ -23,15 +23,13 @@ #include "babl-internal.h" #include "babl-db.h" - static int -each_babl_model_destroy (Babl *babl, - void *data) +babl_model_destroy (void *data) { + Babl *babl = data; if (babl->model.from_list) - babl_list_destroy (babl->model.from_list); - babl_free (babl); - return 0; /* continue iterating */ + babl_free (babl->model.from_list); + return 0; } static char * @@ -60,6 +58,7 @@ model_new (const char *name, babl = babl_malloc (sizeof (BablModel) + sizeof (BablComponent *) * (components) + strlen (name) + 1); + babl_set_destructor (babl, babl_model_destroy); babl->model.component = (void *) (((char *) babl) + sizeof (BablModel)); babl->instance.name = (void *) (((char *) babl->model.component) + sizeof (BablComponent *) * (components)); diff --git a/babl/babl-model.h b/babl/babl-model.h index 617c91c..0a4786b 100644 --- a/babl/babl-model.h +++ b/babl/babl-model.h @@ -19,7 +19,7 @@ #ifndef _BABL_MODEL_H #define _BABL_MODEL_H -BABL_NAMED_CLASS_DECLARE (model); +BABL_CLASS_DECLARE (model); typedef struct { diff --git a/babl/babl-sampling.c b/babl/babl-sampling.c index d3fa637..a3fa3a6 100644 --- a/babl/babl-sampling.c +++ b/babl/babl-sampling.c @@ -47,9 +47,7 @@ static int each_babl_sampling_destroy (Babl *babl, void *data) { - if (babl->sampling.from_list) - babl_list_destroy (babl->sampling.from_list); - return 0; /* continue iterating */ + return 0; } void diff --git a/babl/babl-sampling.h b/babl/babl-sampling.h index 869e3de..82e6d15 100644 --- a/babl/babl-sampling.h +++ b/babl/babl-sampling.h @@ -24,10 +24,12 @@ BABL_CLASS_DECLARE (sampling); typedef struct { BablInstance instance; - BablList *from_list; int horizontal; int vertical; char name[4]; } BablSampling; +void +babl_sampling_class_init (void); + #endif diff --git a/babl/babl-type.c b/babl/babl-type.c index c150e2c..467b33f 100644 --- a/babl/babl-type.c +++ b/babl/babl-type.c @@ -24,18 +24,15 @@ #include "babl-internal.h" #include "babl-db.h" - static int -each_babl_type_destroy (Babl *babl, - void *data) +babl_type_destroy (void *data) { + Babl *babl = data; if (babl->type.from_list) - babl_list_destroy (babl->type.from_list); - babl_free (babl); - return 0; /* continue iterating */ + babl_free (babl->type.from_list); + return 0; } - static Babl * type_new (const char *name, int id, @@ -47,6 +44,7 @@ type_new (const char *name, babl_assert (bits % 8 == 0); babl = babl_malloc (sizeof (BablType) + strlen (name) + 1); + babl_set_destructor (babl, babl_type_destroy); babl->instance.name = (void *) ((char *) babl + sizeof (BablType)); babl->class_type = BABL_TYPE; babl->instance.id = id; diff --git a/babl/babl-type.h b/babl/babl-type.h index 10e4040..8030fe5 100644 --- a/babl/babl-type.h +++ b/babl/babl-type.h @@ -19,7 +19,7 @@ #ifndef _BABL_TYPE_H #define _BABL_TYPE_H -BABL_NAMED_CLASS_DECLARE (type); +BABL_CLASS_DECLARE (type); typedef struct { diff --git a/babl/babl.c b/babl/babl.c index 6386f60..bc3f7de 100644 --- a/babl/babl.c +++ b/babl/babl.c @@ -21,6 +21,19 @@ static int ref_count = 0; +#define BABL_PATH LIBDIR BABL_DIR_SEPARATOR BABL_LIBRARY + +static const char * +babl_dir_list (void) +{ + const char *ret; + + ret = getenv ("BABL_PATH"); + if (!ret) + ret = BABL_PATH; + return ret; +} + void babl_init (void) { @@ -29,20 +42,20 @@ babl_init (void) if (ref_count++ == 0) { babl_internal_init (); - babl_type_class_init (); babl_sampling_class_init (); - babl_component_class_init (); - babl_model_class_init (); - babl_format_class_init (); - babl_conversion_class_init (); + babl_type_db (); + babl_component_db (); + babl_model_db (); + babl_format_db (); + babl_conversion_db (); + babl_extension_db (); + babl_fish_db (); babl_core_init (); babl_sanity (); babl_extension_base (); babl_sanity (); - babl_extension_class_init (); - babl_sanity (); - babl_fish_class_init (); - babl_sanity (); + + babl_extension_load_dir_list (babl_dir_list ()); } } @@ -63,14 +76,15 @@ babl_exit (void) } } - babl_extension_class_destroy (); - babl_fish_class_destroy (); - babl_conversion_class_destroy (); - babl_format_class_destroy (); - babl_model_class_destroy (); - babl_component_class_destroy (); - babl_sampling_class_destroy (); - babl_type_class_destroy (); + babl_extension_deinit (); + babl_free (babl_extension_db ());; + babl_free (babl_fish_db ());; + babl_free (babl_conversion_db ());; + babl_free (babl_format_db ());; + babl_free (babl_model_db ());; + babl_free (babl_component_db ());; + babl_free (babl_type_db ());; + babl_internal_destroy (); #if BABL_DEBUG_MEM babl_memory_sanity (); -- 2.30.2